package com.ruoyi.game.websocket.message.packet;

import com.ruoyi.game.websocket.message.dto.RoomInfoDTO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.Map;

/**
 * 玩家重连后下发的完整对局信息
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ReconnectPush {

    // ------- 房间与对局 -------
    private long roomId;
    private long setId;
    private int dealerPos;
    private int setState; // 房间阶段：对应 enum SetState 的 ordinal()

    // ------- 手牌与底牌 -------
    private Map<Integer, List<Integer>> handCardsMap;
    private List<Integer> kouPaiList;
    private List<Integer> zhuCards;  // 当前最大的亮主牌（可能为空）
    private Map<Integer, List<Integer>> allLiangZhuCards; // seatIndex -> 他亮过的牌
    private int liangzhuSeatIndex;   // 亮主的座位号
    private boolean kouDiFinished;   // ✅ true 表示底牌已扣完，false 表示还在等待扣底

    // ------- 当前玩家视角 -------
    private int mySeatIndex;              // 当前重连玩家的座位号
    private List<Integer> myHandCards;    // 当前玩家的手牌（非 map，是 List）
    private List<Integer> myPlayedCards;  // 当前玩家已出的牌（在当前 round 中）
    private List<Integer> myLiangZhuCards;  // 当前玩家自己亮过的主牌（非最大主也要记录）

    // ------- 喊打信息 -------
    private List<Integer> dealerTeam;
    private List<Integer> idleTeam;
    private Integer helperCard;
    private boolean handaFinished;   // ✅ true 表示喊打已完成，false 表示还在喊打阶段

    // ------- 当前轮次 -------
    private int roundId;
    private int waitPos;  // 当前等待操作玩家的 seatIndex
    private Map<Integer, List<Integer>> roundCardMap;     // seatIndex -> 当前轮出的牌
    private List<Integer> prevRoundCards;
    private Map<Integer, List<Integer>> remainCards;

    // ------- 上轮回合结果 -------
    private int bigSeat;
    private int bigTeamId;
    private int roundScore;
    private int setScore;

    // ------- 分数结算相关 -------
    private int baseScore;
    private int daduMultiplier;
    private int fanzhuMultiplier;
    private int shengjiMultiplier;
    private int finalScoreMultiplier;
    private boolean zhuangWin;

}
